//////////////////////////////////////////////////////////////////////
//
// NO_IOABase.h header for the $1 class.
//
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
#ifndef NO_IOABase_H
#define NO_IOABase_H

//////////////////////////////////////////////////////////////////////////
#include "NO_Includes.h"

//////////////////////////////////////////////////////////////////////////
class NO_DLL_TAL NO_IOABase
{
protected:
	//////////////////////////////////////////////////////////////////////////
	typedef std::map<NO_UInt32,NO_Object>	SerialMap;
	
public:
	//////////////////////////////////////////////////////////////////////
	// con/destruction
	//////////////////////////////////////////////////////////////////////
	
	//////////////////////////////////////////////////////////////////////
	NO_IOABase(void);
	~NO_IOABase();
	
	//////////////////////////////////////////////////////////////////////////
	NO_IOABase(const NO_IOABase& rhs);
	NO_IOABase& operator= (const NO_IOABase& rhs);
	
	//////////////////////////////////////////////////////////////////////////
	// modify
	//////////////////////////////////////////////////////////////////////////
	
	//////////////////////////////////////////////////////////////////////////
	void reset(void);
	void print(void);
	
	//////////////////////////////////////////////////////////////////////////
	std::stringstream stream;
	
protected:
	//////////////////////////////////////////////////////////////////////////
	NO_Object& registerObject(NO_Object& object, NO_UInt32 id);
	NO_Object& findObject(NO_UInt32 id);
	
	//////////////////////////////////////////////////////////////////////////
	SerialMap serials;

	//////////////////////////////////////////////////////////////////////////
	union
	{
		struct  
		{
			unsigned doNotRegister	: 1;
			unsigned doReferences	: 1;
			unsigned doNotFind		: 1;
		};

		NO_UInt32 flags;
	};
};

#endif 
